变量：存储数据的容器(可以被赋值的标签)
变量的本质：在内存中开辟一个空间
在js中可以使用 var、let 和 const 关键字来声明变量：
var变量声明方式，具有函数作用域。使用var声明的变量会被提升到其作用域的顶部，这意味着变量可以在声明之前被访问，但其值会是undefined。在同一个作用域内，可以重复使用var声明同一个变量，而不会报错。
let变量声明方式，具有块级作用域。let声明的变量只在当前的代码块（如：if、for、while等）内有效。在声明之前访问let变量会抛出错误，从代码块开始到变量声明之间的区域称为暂时性死区。在同一个作用域内，不能重复使用let声明同一个变量。
const变量声明方式，具有块级作用域，且值不可变。声明时必须同时赋值，否则会报错。使用const声明的变量（常量）不能重新赋值，但如果变量是引用数据类型如一个对象，变量中存储的是地址，那么对象的属性是可以修改的，因为const保证的是变量引用的地址不变，而不是对象本身不可变。
尽量使用 const，除非这个变量需要被重新赋值。
如果变量需要被重新赋值，使用 let。
避免使用 var，因为它的一些特性（如函数作用域、变量提升）容易导致代码错误。
变量的声明：let 变量名
由两部分构成：声明关键字、变量名(标识符)
变量的赋值：变量名 = 值
可以先声明再赋值，也可以声明并直接赋值(变量的初始化)，不赋值默认值为undefined
js变量命名规则：由字母、数字、下划线、$符号组成，不能以数字开头，不能是关键字和保留字，严格区分大小写(尽量使用小驼峰命名法)
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        let age
        age = 21
        console.log(age)
        let name = 'hqy'
        name = 'xy'  //let不允许多次声明同名变量，可以重新赋值
        let gender = '男', school = 'hgd'  //同时声明多个变量
        let ss, dd
        ss = 1
        dd = 2
    </script>
</body>

</html>